﻿//
//
// 版权所有 (c) 2021-2023 JR  
//
// 特此免费授予获得本软件的任何人以处理本软件的权利，但须遵守以下条件：在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
//
// 软件按“原样”提供，不提供任何形式的明示或暗示的保证，包括但不限于对适销性、适用性和非侵权的保证。
// 在任何情况下，作者或版权持有人均不对任何索赔、损害或其他责任负责，无论是因合同、侵权或其他方式引起的，与软件或其使用或其他交易有关。

using Newtonsoft.Json;
using SapNwRfc;
using SqlSugar.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EMC.VISITOR.Core;

/// <summary>
/// 请求参数
/// </summary>
public class SAPRequest
{
    [SapName("INPUT")]
    public string data { get; set; }
}
public class SAPResponse<T>
{
    /// <summary>
    /// 请求参数
    /// </summary>
    [SapName("INPUT")]
    public string INPUT { get; set; }
    /// <summary>
    /// 返回参数
    /// </summary>
    [SapName("OUT")]
    public string OUT { get; set; }


    public SAPData<T> GetSap()
    {
        var response = JsonConvert.DeserializeObject<SAPData<T>>(OUT);
        return response;
    }
    public JRResult<T> GetCustomeResult<T>() where T : class
    {
        var response = JsonConvert.DeserializeObject<SAPData<T>>(OUT);
        var result = !response.status.IsNullOrEmpty() && response.status.ObjToInt() == SAPStatus.Fail.ObjToInt() ?
            CustomeResult.Fail<T>(response.message, response.data) : CustomeResult.Success<T>(response.data);
        return result;
    }
    public T GetSapData()
    {
        var response = JsonConvert.DeserializeObject<SAPData<T>>(OUT);
        return response.data;
    }
    public List<T> GetSapDataList()
    {
        var response = JsonConvert.DeserializeObject<SAPData<List<T>>>(OUT);
        if (response.data == null || response.status == Convert.ToInt32(SAPStatus.Fail).ToString())
            response.data = new List<T>();

        return response.data;
    }
}

public class SAPData<T>
{
    public string name { get; set; }
    public string status { get; set; }
    public string message { get; set; }
    public virtual T data { get; set; }
}

public enum SAPStatus
{
    Fail = 0,
    Success = 1
}